import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase de jugador principal
 * @author (Roberto Rodriguez) 
 * @version (27-may-2012)
 */
public class Heroe extends Personaje
{
    private int val;                            //Indica que imagen de animacion se encutra el heroe
    private int cont;                           //Es el contador de tiempo para regrese a la posicion original del heroe en su animacion
    private int conta;                          //Es el contador de tiempo para mientras este saltando
    private int pos;                            //Indica la posicion cardinal del heroe
    private int tipoHeroe;                      //Indica el tipo de heroe indicando el vehiculo actual
    private boolean salto;                      //Una bandera de salto
    private int inmunidad;                      //Indica cuanta inmunidad tiene cada vehiculo
    private static final int izquierda = 1;     //Constante para cuando el heroe esta de lado izquiedo
    private static final int derecha = 0;       //Constante para cuando el heroe esta de lado derecho
                            //*****Imagenes para la animacion*****
    private GreenfootImage image1;
    private GreenfootImage image2;
    private GreenfootImage image3;
    private GreenfootImage image4;
    private GreenfootImage image1i;
    private GreenfootImage image2i;
    private GreenfootImage image3i;
    private GreenfootImage image4i;
    /**
     * Se ejecutan constantemente mientas el boton de run este precionado
     * Ejecuta el metodo mover y el metodo coin
     */
    public void act() 
    {
        mover();
        recogeMoneda();
    }
    /**
     * Este regresa la inmudidad del heroe dependiendo de vehculo del heroe
     * @return entero de la variable inmunidad
     */
    public int regresaInmunidad()
    {
        return inmunidad;
    }
    /**
     * Este metodo checa que si el heroe se ha intersectado con un objeto de la clase moneda
     * hace el llamado a aumenta moneda del mundo y la elimina
     */
    public void recogeMoneda()
    {
        Actor moneda;
        moneda = super.getOneIntersectingObject(Moneda.class);
        if(moneda!=null)
        {
            WorldGather mundo = (WorldGather) super.getWorld();
            mundo.aumentaMonedas(this.getX(),this.getY());
            mundo.removeObject(moneda);
            
        }
    }
    /**
     * Este realiza el movimiento del heroe hacia la izquerda, derecha y salto
     * ademas hace el cambio de imagen para la animacion
     */
    public void mover()
    {
        String tecla = Greenfoot.getKey();
        int x = super.getX();
        int y = super.getY();
        if(tecla!=null)
        {
            cont=0; 
            if(tecla=="right"){             //Este es si movimento es hacia la derecha
                this.move(15);              //Hace el moviento del heroe
                pos=derecha;                //Asigancion de la posicion a la variable pos
                    if(val==0){             //Cambio de Imagen para animacion
                        setImage(image2);
                        val=val+1;
                    }
                    else if(val==1){
                        
                        setImage(image3);
                        val=val+1;
                    }
                    else if(val==2){
                        
                        setImage(image4);
                        val=val+1;
                    }
                    else if(val==3){
                        
                        setImage(image1);
                        val=0;
                    }
            }
            if(tecla=="left"){              //Este es si el moviemineto es hacia la izquierda
                pos=izquierda;              //Asigancion de la posicion a la variable pos
                this.move(-15);             //Hace el moviemiento del heroe
                    if(val==0){             //Cambio de imagen para la animacion
                        setImage(image2i);
                        val=val+2;
                    }
                    else if(val==1){
                        
                        setImage(image3i);
                        val=val+1;
                    }
                    else if(val==2){
                        
                        setImage(image4i);
                        val=val+1;
                    }
                    else if(val==3){
                        
                        setImage(image1i);
                        val=0;
                    }
            }
            if(Greenfoot.isKeyDown("up"))    //Este es si el moviento es hacia arriba osea el salto
            {      
                salto=true;                  //Activa la bandera de salto en verdadero para hacer el moviemto de salto
            }

        }
        else{
            
            cont=cont+1; 
            if(cont==30){                   //Regresa la imagen a la postura normal del heroe en la animacion
                if(pos==derecha)
                    setImage(image1);
                if(pos==izquierda)
                    setImage(image1i);
                    val=0;
                    cont=0;
            }
            if(salto)                       //Si la bandera salto esta activada realiza el moviento del salto
            {    
                conta++;
                if(conta<50)
                {
                    setLocation(getX(),getY()-4);
                }else
                if(conta>=50 && conta<100)
                {
                    setLocation(getX(),getY()+3);
                }else
                {
                    setLocation(getX(),384);
                    conta=0;
                    salto=false;
                }
            }
        }
        WorldGather mundo = (WorldGather) super.getWorld();
        mundo.cambiaPosicion(pos);
    }
    /**
     * Constructor de Heroe
     * En este dependiendo del tipo de heroe osea el vehiculo hace las asiganiones
     * a las imagenes necesarias para la animacion e inicializa las variables.
     * @param entero del tipo del heroe osea el tipo de vehiculo y nivel
     */
    public Heroe(int tH)
    {
        tipoHeroe=tH;
        if(tH==1)
        {   
            inmunidad=1;
            image1 = new GreenfootImage("heroe1.png");
            image2 = new GreenfootImage("heroe2.png");
            image3 = new GreenfootImage("heroe3.png");
            image4 = new GreenfootImage("heroe4.png");
            image1i = new GreenfootImage("heroe1i.png");
            image2i = new GreenfootImage("heroe2i.png");
            image3i = new GreenfootImage("heroe3i.png");
            image4i = new GreenfootImage("heroe4i.png");
        }else
        if(tH==2)
        {
            inmunidad=2;
            image1 = new GreenfootImage("moto1.png");
            image2 = new GreenfootImage("moto2.png");
            image3 = new GreenfootImage("moto3.png");
            image4 = new GreenfootImage("moto4.png");
            image1i = new GreenfootImage("moto1i.png");
            image2i = new GreenfootImage("moto2i.png");
            image3i = new GreenfootImage("moto3i.png");
            image4i = new GreenfootImage("moto4i.png");
        }else
        if(tH==3)
        {
            inmunidad=3;
            image1 = new GreenfootImage("carro1.png");
            image2 = new GreenfootImage("carro2.png");
            image3 = new GreenfootImage("carro3.png");
            image4 = new GreenfootImage("carro4.png");
            image1i = new GreenfootImage("carro1i.png");
            image2i = new GreenfootImage("carro2i.png");
            image3i = new GreenfootImage("carro3i.png");
            image4i = new GreenfootImage("carro4i.png");
        }
        else
        if(tH==4)
        {
            inmunidad=1;
            image1 = new GreenfootImage("buzo1.png");
            image2 = new GreenfootImage("buzo2.png");
            image3 = new GreenfootImage("buzo3.png");
            image4 = new GreenfootImage("buzo4.png");
            image1i = new GreenfootImage("buzo1i.png");
            image2i = new GreenfootImage("buzo2i.png");
            image3i = new GreenfootImage("buzo3i.png");
            image4i = new GreenfootImage("buzo4i.png");
        }
        else
        if(tH==5)
        {
            inmunidad=3;
            image1 = new GreenfootImage("submarino1.png");
            image2 = new GreenfootImage("submarino2.png");
            image3 = new GreenfootImage("submarino3.png");
            image4 = new GreenfootImage("submarino4.png");
            image1i = new GreenfootImage("submarino1i.png");
            image2i = new GreenfootImage("submarino2i.png");
            image3i = new GreenfootImage("submarino3i.png");
            image4i = new GreenfootImage("submarino4i.png");
        }
        else
        if(tH==6)
        {
            inmunidad=1;
            image1 = new GreenfootImage("volando1.png");
            image2 = new GreenfootImage("volando2.png");
            image3 = new GreenfootImage("volando3.png");
            image4 = new GreenfootImage("volando4.png");
            image1i = new GreenfootImage("volando1i.png");
            image2i = new GreenfootImage("volando2i.png");
            image3i = new GreenfootImage("volando3i.png");
            image4i = new GreenfootImage("volando4i.png");
        }
        else
        if(tH==7)
        {
            inmunidad=2;
            image1 = new GreenfootImage("nave1.png");
            image2 = new GreenfootImage("nave2.png");
            image3 = new GreenfootImage("nave3.png");
            image4 = new GreenfootImage("nave4.png");
            image1i = new GreenfootImage("nave1i.png");
            image2i = new GreenfootImage("nave2i.png");
            image3i = new GreenfootImage("nave3i.png");
            image4i = new GreenfootImage("nave4i.png");
        }
        setImage(image1);
        val=0;
        cont=0;
        pos=0;
        salto=false;
    }
}
